この章では、TimesTenレプリケーションおよびXLAを使用するシステムを設計する際に、理解しておく必要があるいくつかの問題を中心に説明します。
レプリケーションの情報に関するその他のソースには、Oracle Technology Networkで入手可能なその他のドキュメントがあります。
これは必須ではありませんが、不要な混乱を回避します。
DSNは、データソース名です。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の「レッスン1: データソース名(DSN)の定義」を参照してください。
ファイル名の接頭辞は、次の項で定義します。
UNIXでは、myDSNと呼ばれるDSNは次のようになります。
[myDSN] Driver=/opt/TimesTen/tt60/lib/libtten.so Datastore=/directory/ds_file_prefixmyDSNのファイル名接頭辞は、ds_file_prefixです。
Windowsでは、ODBCコントロール・パネルで同様に定義します。myDSNを次の場所に設定していた場合、「Data Store Path and Name」というラベルのフィールドに次のパスが表示されます。
C:\directory\ds_file_prefixmyDSNのファイル名接頭辞は、ds_file_prefixです。
レプリケーションの構成コマンドは、データ・ストアのファイル名の接頭辞を参照しています。これは、次のSQLベースのレプリケーション構成コマンドで使用されます。
CREATE REPLICATION rep.name ELEMENT e TABLE rep.t1 MASTER <データ・ストアのファイル名接頭辞> ON <ホスト名> ...またttRepAdminコマンドライン・ユーティリティがデータ・ストアの名前を参照する際は、データストアのファイル名接頭辞が常に使用されます。
ttRepAdmin -duplicate -from <他のデータ・ストアのファイル名接頭辞 > -host <ホスト名> dsn=myDSNさらに、TimesTenレプリケーションでは、<file name prefix, hostname>のペアは一意である必要があります。したがって、2つのファイル名接頭辞が同じ場合、同一のコンピュータ上で2つのデータ・ストアのレプリケーションを設定できません。
次の理由から、常にDNS名と同じファイル名接頭辞をデータ・ストアに設定すると、非常に便利です。
TimesTenでは、ttRepAdmin -duplicate操作を実行する前に、マスター・データ・ストアで明示的なチェックポイントを2回実行することをお薦めします。チェックポイントを強制実行するには、ttCkpt組込みプロシージャを使用します。
マスター・データ・ストアでチェックポイントを実行すると、不要なトランザクション・ログがパージされます。これによって、複製操作の一部として転送されるデータ量を削減でき、その結果、-duplicate操作が高速になります。
TimesTen自体のバージョンをアップグレードする際に、TimesTenアプリケーションのアップグレードをオンラインで実行する場合、レプリケーションの構成コマンドおよびスクリプトに、レプリケーションのポート番号を手動で指定する必要があります。
ポート番号を手動で指定するのではなく、レプリケーションにポート番号を動的に割り当てる場合は、異なるバージョン間のTimesTenレプリケーションで正常に通信できないことがあります。
高可用性を保証するためには、TimesTenレプリケーションを監視することが重要です。アプリケーションでのレプリケーションの使用の監視が必要になる場合がいくつかあります。
アプリケーションの種類によっては、システムの初期化時に多くのデータ・ストア操作を実行するため、トランザクションの速度が遅くなる場合があります。このような状況では、受信者ノードでttRepAdmin -duplicate操作を実行し、送信者ノードが完全に移入された後にのみレプリケーションを開始すると、より効果的な場合があります。
いずれの状況でも(レプリケーションの受信者との通信の停止、またはレプリケーションの遅延)、レプリケートを待機しているデータを保持するトランザクション・ログの格納には、レプリケーションの送信者側に余分なディスク領域が必要です。この状況では、チェックポイント処理によってログ・ファイルは削除されず、その結果、アプリケーションがディスク領域不足に陥ることがあります。
レプリケーションが必要なログ・ファイルの保持に使用するメカニズムは、レプリケーション・ブックマークと呼ばれます。これによって、チェックポイント処理によるログ・ファイルの削除が回避されます。コマンドラインでアプリケーションのレプリケーション・ブックマークを参照するには、ttRepAdmin -bookmarkコマンドを実行します。レプリケーション中に複数のログ・ファイルの遅延が発生する場合は、アプリケーションでレプリケーション・バックログを定期的に確認し、適切な処理を行う必要があります。
サブスクライバで大幅な遅延が発生している場合、ログの保存を自動的に停止するように、しきい値をレプリケーションに設定することを検討してください。
ttRepAdminの詳細は、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』の第2章「ユーティリティ」を参照してください。ttBookmarkについての詳細は、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』の第3章「組込みプロシージャ」を参照してください。
SEQUENCEは各ノードで独立しており、レプリケートされません。db1では、1で始まり100000で終わる名前付きのシーケンスを定義し、db2では、100001で始まり200000で終わる名前付きのシーケンスを定義できます。したがって、たとえば、表の主キー列の移入には各ノードのシーケンスを使用できます。その結果、各ノードが他のノードと競合する危険性を考慮せずに、その表への挿入が可能になります。
リンク障害の後に、(たとえば、レプリケーションが追いつく、または保存したログ・ファイルの再実行によって)レプリケーションが通常どおりリカバリされると、特別な処理は必要ありません。ただし、障害の発生したノードが長時間停止した場合は、リカバリ処理にttRepAdmin -duplicateを使用して、存続するノードから障害の発生したノードにデータ・ストアを再移入します(トランザクションのキューが非常に長い場合は、この処理が必要です。)ttRepAdmin -duplicateコマンドによってシーケンス定義がノードから別のノードにコピーされ、この例では最終的に、両方のノードで100001から200000のシーケンス値が取得されます。これは、まさに回避しようとしたことです。
シーケンス番号の重複を避けるために、次のタスクをこの順序で完了してください。